"""
转换数据类型
"""

"""
转换为整型 int()
字符串必须为整数才能转换
"""
print("*" * 5, "转换为整型", "*" * 5)
str_1 = "1024"
print("str_1变量类型为%s，转换为整型后类型为%s" % (type(str_1), type(int(str_1))))
str_2 = "1.2"
# print(int(str_2)) # 即使字符串为浮点数也无法转换
# 浮点型转换为整型
float_1 = 2.4
print(int(float_1))
# 布尔类型转换为整型
bool_1, bool_2 = True, False
print(int(bool_1), int(bool_2))
# 进制的转换 int(字符串,n进制)
str_num_16 = "1a"
str_num_2 = "1001"
print(int(str_num_16, 16))
print(int(str_num_2, 2))

"""
转换为浮点型 float()
"""
print("*" * 5, "转换为浮点型", "*" * 5)
# 字符串转换为浮点型
print(float(str_1))
int_1 = 200
# 整型转化为浮点型
print(float(int_1))
# 布尔类型转换为浮点型
print(float(bool_1), float(bool_2))

"""
转换为布尔类型 bool()
有值为True
空值为False
"""
print("*" * 5, "转换为布尔类型", "*" * 5)
print(bool(str_1))
str_3 = ""
print(bool(str_3))
int_2 = 0
print(bool(int_2))
float_1 = 1
print(bool(float_1))

"""
转换为字符串 str()
"""
print("*" * 5, "转换为字符串", "*" * 5)
print("int_1变量类型为%s，转换为字符串后类型为%s" % (type(int_1), type(str(int_1))))
print("bool_1变量类型为%s，转换为字符串后类型为%s" % (type(bool_1), type(str(bool_1))))
print(str(bool_1), "类型为", type(str(bool_1)))

"""
小整数的地址问题
Python中的小整数，通常指的是-5至256之间的整数
当你在Python中创建一个整数对象时，Python会根据该整数的值动态地为其分配内存空间。对于小整数，Python会使用一种称为“小整数缓存”的机制来优化内存使用。这个缓存池中的整数对象会被重复利用，而不是为每个新创建的小整数分配新的内存空间。这样可以减少内存分配和释放的开销，提高程序的性能。
如果你需要跟踪Python对象的内存地址，可以使用Python提供的内置函数id()来获取对象的唯一标识符，这个标识符通常可以用来近似地表示对象的内存地址。但是请注意，这个标识符并不是真正的内存地址，而是由Python解释器生成的一个唯一标识符，用于区分不同的对象实例。
"""
a = 1
b = 1
c = 300
d = 300
print(id(a), id(b))
print(id(c), id(d))  # 需要在python环境上测试，pycharm测不出来
